from typing import List


class Solution:
    def threeEqualParts(self, nums: List[int]) -> List[int]:
        count1 = nums.count(1)

        # 处理数列中没有1的情况
        if count1 == 0:
            return [0, 2]

        # 如果1的数量不能被等分，则无法做到
        if count1 % 3 != 0:
            return [-1, -1]

        # 计算每个部分有多少个1
        count1 //= 3

        # 寻找三个部分中开始位置（上一个部分最后一个1的下一个坐标）
        n0, n1, n2 = 0, -1, -1
        now = 0
        for i in range(len(nums)):
            if now == count1:
                if n1 == -1:
                    n1 = i
                elif n2 == -1:
                    n2 = i
                now = 0
            if nums[i] == 1:
                now += 1

        # print("3个部分第1个1的出现位置:", n0, n1, n2)

        # 统计结尾的0的数量（通过第3部分最后的0的数量）
        count0 = 0
        for i in range(len(nums) - 1, -1, -1):
            if nums[i] == 0:
                count0 += 1
            else:
                break

        # print("结尾0的数量:", count0)

        # 计算3个部分的结尾位置
        e0, e1, e2 = n1 + count0, n2 + count0, len(nums)

        # 如果第1部分或第2部分结尾处的0数量不够，则无法做到
        if 1 in nums[n1:n1 + count0] or 1 in nums[n2:n2 + count0]:
            return [-1, -1]

        # print("3个部分的结束位置:", e0, e1, e2)

        # 计算3个部分的开头位置：第1个1的出现位置
        s0, s1, s2 = 0, e0, e1
        while nums[s0] == 0:
            s0 += 1
        while nums[s1] == 0:
            s1 += 1
        while nums[s2] == 0:
            s2 += 1

        # 判断是否能够三等分
        if nums[s0:e0] == nums[s1:e1] == nums[s2:e2]:
            return [e0 - 1, e1]

        return [-1, -1]


if __name__ == "__main__":
    print(Solution().threeEqualParts([1, 0, 1, 0, 1]))  # [0,3]
    print(Solution().threeEqualParts([1, 1, 0, 1, 1]))  # [-1,-1]

    # 测试用例3/118
    print(Solution().threeEqualParts([1, 0, 1, 1, 0]))  # [-1,-1]
